import { format } from 'date-fns';
import { stringifyQuery } from 'vue-router';

/**
 * @desc 将时间戳转换为指定格式的日期；入参可以是秒级时间戳、毫秒级时间戳；
 * 如果入参是秒级时间戳（10位），会乘以1000转换；格式默认为'yyyy-MM-dd HH:mm'；
 * 主要场景：通常情况下时间戳转换日期不传格式，而是用默认格式；后端返回的时间戳一般是秒级时间戳，如果直接用date-fns需要自己乘1000传入
 * @param date - Date | Number
 * @param formatStr - String
 * @returns 返回格式化后的秒级时间戳 - Number
 * @example
 * ```
 * formatDate(1658320372161) // 2022-07-20 20:32
 * format(1658320372, 'yyyy-MM-dd HH:mm') // 1970-01-20 12:38
 * formatDate(1658320372) // 2022-07-20 20:32
 * formatDate(new Date()) //  2022-07-21 11:28
 * formatDate(1658320372000, 'yyyy/MM/dd HH:mm:ss') // 2022/07/20 20:32:52
 * ```
 */

export const formatDate = (
    date: number | Date,
    formatStr = 'yyyy-MM-dd HH:mm:ss',
) => {
    if (typeof date === 'number' && date.toString().length === 10) {
        return format(date * 1000, formatStr);
    } else {
        return format(date, formatStr);
    }
};

/** 打开询盘云弹窗 */
function openConsultDialog() {
    const btnEl = document.getElementById(
        'xhl-launch-button-div',
    ) as HTMLButtonElement;
    const chatEl = document.getElementById('xhl-container') as HTMLDivElement;
    const hiddenClassName = ' xhl-hidden';
    if (!btnEl || !chatEl) return;

    if (chatEl.className.includes(hiddenClassName)) {
        chatEl.className = chatEl.className.replace(hiddenClassName, '');
        btnEl.className = `${btnEl.className}${hiddenClassName}`;
    }
}

/** 处理图片路径函数
 *  @description 为了兼容本地服务器图片和第三方图片
 */
function handlerImgSrc(src?: string) {
    if (!src || src === '' || typeof src !== 'string') return undefined;
    if (src.startsWith('https://') || src.startsWith('http://')) {
        return src;
    }
    return `${import.meta.env.VITE_IMG_BASE_URL}${src}`;
}

function createGuid() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
        /[xy]/g,
        function (c) {
            var r = (Math.random() * 16) | 0,
                v = c == 'x' ? r : (r & 0x3) | 0x8;
            return v.toString(16);
        },
    );
}
/** 千分位转换函数 */
function thousands(num: number) {
    return new Intl.NumberFormat().format(num);
}

export default {
    formatDate,
    openConsultDialog,
    handlerImgSrc,
    open,
    createGuid,
    thousands,
};
